package org.jsola.contract.web;

import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import org.jsola.contract.dto.ContractConfigSiteAddDTO;
import org.jsola.contract.dto.ContractConfigSiteUpdateDTO;
import org.jsola.contract.entity.ContractConfigSiteDO;
import org.jsola.contract.query.ContractConfigSiteQuery;
import org.jsola.contract.vo.ContractConfigSiteListVO;
import org.jsola.contract.vo.ContractConfigSiteVO;
import org.jsola.core.Page;
import org.jsola.core.Result;

import java.util.List;

/**
 * 租户电子合同配置
 *
 * @author JanusMix
 */
@Api(tags = "contract-租户电子合同配置")
public interface IContractConfigSiteControllerAPI {

    /**
     * 新增租户电子合同配置
     * @param contractConfigSiteAddDTO 租户电子合同配置新增实体
     * @return 租户电子合同配置展示对象
     */
    @ApiOperation(value = "新增租户电子合同配置")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "contractConfigSiteAddDTO", dataType = "ContractConfigSiteAddDTO", value = "新增租户电子合同配置", paramType = "body")
    })
    Result<ContractConfigSiteVO> save(ContractConfigSiteAddDTO contractConfigSiteAddDTO);


    /**
     * 修改租户电子合同配置
     * @param contractConfigSiteUpdateDTO 租户电子合同配置
     * @return 更新数量
     */
    @ApiOperation(value = "修改租户电子合同配置")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "contractConfigSiteUpdateDTO", dataType = "ContractConfigSiteUpdateDTO", value = "修改租户电子合同配置", paramType = "body")
    })
    Result<Integer> update(ContractConfigSiteUpdateDTO contractConfigSiteUpdateDTO);




    /**
     * 删除单个租户电子合同配置，彻底删除
     * @param contractConfigSiteId 租户电子合同配置id
     * @return 删除数量
     */
    @ApiOperation(value="删除单个租户电子合同配置，彻底删除")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "contractConfigSiteId", dataType = "Long", value = "租户电子合同配置id", paramType = "path")
    })
    Result<Integer> delete(Long contractConfigSiteId);


    /**
     * 批量删除租户电子合同配置，彻底删除
     * @param contractConfigSiteIds 租户电子合同配置id集合
     * @return 删除数量
     */
    @ApiOperation(value = "批量删除租户电子合同配置，彻底删除")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "contractConfigSiteIds", dataType = "Long[]", value = "租户电子合同配置id数组", paramType = "body" ,allowMultiple = true)
    })
    Result<Integer> deleteBatch(Long[] contractConfigSiteIds);


    /**
     * 根据租户电子合同配置id查询租户电子合同配置详情
     * @param contractConfigSiteId 租户电子合同配置id
     * @return 租户电子合同配置详情
     */
    @ApiOperation(value="根据租户电子合同配置id查询租户电子合同配置详情")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "contractConfigSiteId", dataType = "Long", value = "租户电子合同配置id", paramType = "path")
    })
    Result<ContractConfigSiteVO> findById(Long contractConfigSiteId);


    /**
     * 查询租户电子合同配置
     * @param contractConfigSiteQuery 租户电子合同配置查询参数
     * @return page
     */
    @ApiOperation(value="查询租户电子合同配置")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "contractConfigSiteQuery", dataType = "ContractConfigSiteQuery", value = "租户电子合同配置查询参数", paramType = "query")
    })
    Result<List<ContractConfigSiteListVO>> listAll(ContractConfigSiteQuery contractConfigSiteQuery);


     /**
     * 分页查询租户电子合同配置
     * @param contractConfigSiteQuery 租户电子合同配置查询参数
     * @return page
     */
    @ApiOperation(value="分页查询租户电子合同配置")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "contractConfigSiteQuery", dataType = "ContractConfigSiteQuery", value = "租户电子合同配置查询参数", paramType = "query")
    })
    Result<Page<ContractConfigSiteListVO>> page(ContractConfigSiteQuery contractConfigSiteQuery);

    /**
     * 获取租户合同配置
     *
     * @return 租户合同配置
     */
    @ApiOperation(value="获取租户合同配置")
    Result<ContractConfigSiteVO> selectBySiteId();


}

